Inside Macintosh: QuickTime Components

| Previous | Chapter contents | Chapter top | Section top | Next |

Implementing the Required Import Component Functions

Listing 1 supplies a sample program that implements a movie data exchange component that imports a Scrapbook file containing QuickDraw PICT images. (For details on QuickDraw PICT images, see the chapter "Basic QuickDraw" in Inside Macintosh: Imaging .) The sample program also provides the dispatchers for the movie import component together with the required functions.

Listing 1 Implementing the required import functions

#define kMediaTimeScale 600

typedef struct {
    ComponentInstance       self
    TimeValue               frameDuration;
} ImportScrapbookGlobalsRecord, **ImportScrapbookGlobals;

/* entry point for all Component Manager requests */
pascal ComponentResult ImportScrapbookDispatcher
                                         (ComponentParameters *params,
                                             Handle storage)
{
    OSErr err = badComponentSelector;
    ComponentFunction componentProc = 0;

    switch (params->what) {
        case kComponentOpenSelect:
            componentProc = ImportScrapbookOpen; break;

        case kComponentCloseSelect:
            componentProc = ImportScrapbookClose; break;

        case kComponentCanDoSelect:
            componentProc = ImportScrapbookCanDo; break;

        case kComponentVersionSelect:
            componentProc = ImportScrapbookVersion; break;

        case kMovieImportFileSelect:
            componentProc = ImportScrapbookFile; break;

        case kMovieImportSetSampleDurationSelect:
            componentProc = ImportScrapbookSetSampleDuration; break;
    }

    if (componentProc)
        err = CallComponentFunctionWithStorage (storage, params,
                                                             componentProc);

    return err;
}

pascal ComponentResult ImportScrapbookCanDo
                                    (ImportScrapbookGlobals storage,
                                        short ftnNumber)
{
    switch (ftnNumber) {
        case kComponentOpenSelect:
        case kComponentCloseSelect:
        case kComponentCanDoSelect:
        case kComponentVersionSelect:
        case kMovieImportFileSelect:
        case kMovieImportSetSampleDurationSelect:
            return true;
        default:
            return false;
    }
}

pascal ComponentResult ImportScrapbookVersion
                                        (ImportScrapbookGlobals storage)
{
    return 0x00010001;
}

pascal ComponentResult ImportScrapbookOpen
                                    (ImportScrapbookGlobals storage,
                                     ComponentInstance self)
{
    storage = (ImportScrapbookGlobals) NewHandleClear
                            (sizeof (ImportScrapbookGlobalsRecord));
    if (!storage) return MemError();
    (**storage).self = self;
    SetComponentInstanceStorage (self, (Handle)storage);
    return noErr;
}

pascal ComponentResult ImportScrapbookClose
                                         (ImportScrapbookGlobals storage,
                                             ComponentInstance self)
{
    if (storage) DisposeHandle((Handle)storage);
    return noErr;
}

© 1997 Apple Computer, Inc.

| Previous | Chapter contents | Chapter top | Section top | Next |